package com.ztrue.framework.handler;

import com.ztrue.framework.handler.definition.IHandlerDefinition;

/**
 * 表示处理器定义注册表
 *
 * @author zhangw
 * @date 2016/11/14 11:46
 * @version: 1.0
 */
public interface IHandlerDefinitionRegistry {
    /**
     * 使用此注册表注册一个新的处理器
     *
     * @param handlerName       处理器名称
     * @param handlerDefinition 处理器定义
     */
    void registerHandlerDefinition(String handlerName, IHandlerDefinition handlerDefinition);

    /**
     * 移除一个处理器
     *
     * @param handlerName 处理器名称
     */
    void removeHandlerDefinition(String handlerName) throws NoSuchHandlerDefinitionException;

    /**
     * 功过名称获取一个处理器
     *
     * @param handlerName 处理器名称
     * @return
     */
    IHandlerDefinition getHandlerDefinition(String handlerName) throws NoSuchHandlerDefinitionException;

    /**
     * 根据处理器类型获取匹配的名称
     *
     * @param type
     * @return
     */
    String[] getHandlerNameByType(Class type);

    /**
     * 判断一个处理器名称是否存在当前注册表
     *
     * @param handlerName 处理器名称
     * @return
     */
    boolean containsHandlerDefinition(String handlerName);

    /**
     * 获取当前注册表中所有处理器名称
     *
     * @return
     */
    String[] getHandlerDefinitionNames();

    /**
     * 获取当前注册表中注册的处理器数量
     *
     * @return
     */
    int getHandlerDefinitionCount();

    /**
     * 根据目标类型获取处理器名称
     *
     * @param targetType 目标类型
     * @return 处理器名称集合
     */
    String[] getHandlerNameByTargetType(Class targetType);

    /**
     * 根据目标类型和处理器类型获取处理器名称
     *
     * @param targetType  目标类型
     * @param handlerType 处理器类型
     * @return
     */
    String[] getHandlerNameByTargetTypeAndHandlerType(Class targetType, Class handlerType);
}
